iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
15
DevOps

Kubernetes 30天學習筆記系列 第 2

[Day 2] Minikube 安裝與配置

  • 分享至 

  • xImage
  •  

前言

在介紹完kubernetes之後,筆者想跟大家分享Minikube。

什麼是 Minikube

Minikube 是由 Google 發布的一個輕量級工具。讓開發者可以在本機上輕易架設一個 Kubernetes Cluster,快速上手 Kubernetes 的指令與環境。Minikube 會在本機上跑起一個 virtual machine,並且在這 VM 裡建立一個 signle-node Kubernetes Cluster,本身並不支援 HA (High availability),也不推薦在實際應用上運行。

對於single-node,或是high availability還不甚熟悉的讀者也無須擔心,在之後的學習都會一一介紹到。

安裝 Minikube

Minikube 支援 WindowsMacOSLinux,在這三種平台的本機端都可以安裝並執行 Minikube 。由於筆者是使用 MacOS ,所以接下來的安裝步驟,都會以 Mac 平台為主

  • 確認本機端是否已安裝Virtualization Software,像是 VirtualBox
  • 手動安裝 kubectl 套件
  • Github 下載 Minikube 套件
  • 在 Minikube 上執行 hello-minikube app

確認本機端是否已安裝 Virtualization Software

正如 前言 提到,minikube 會在本機端跑起一個 vm,所以在開始安裝 minikube 之前,需要先確認本機端是否已安裝Virtualization Software。如果還沒有安裝任何 VM tool,筆者推薦 VirtualBox

virtualbox-homepage

VirtualBox 是一套免費的軟體,支援 Windows, MacOS, Linux 等平台。可以從 官網 直接下載套件並安裝。

virtualbox-downloadpage

安裝完之後會看到歡迎頁面,如 連結

手動安裝 kubectl 套件

確認安裝好 Virtualization Software 後,接著我們須在本機端安裝 kubectlkuberctl 是 Kubernetes Controller ,在未來的學習筆記中,我們也會常常透過 kubectl 指令 存取 Kubernetes 上的物件。

  1. 下載套件( for MacOS )
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl
  1. 給予執行權限
$ chmod +x ./kubectl
  1. 將kubectl移到PATH下
$ sudo mv ./kubectl /usr/local/bin/kubectl
  1. 安裝完之後,在終端機輸入 kubectl ,就會列出 kubectl 所有可用指令囉
$ kubectl

kubectl-introduction

其他平台可參考 kubectl安裝介紹

從 Github 下載 minikube 套件

在架設好 VM 環境以及安裝好 kubectl 之後,我們可以直接從 minikube 的 Github專案 直接下載套件,以 MacOS 來說可以直接透過 brew 安裝套件

$ brew cask install minikube

minikube 套件約 40MB 左右。安裝完之後,可以輸入在 terminal 輸入,minikube 便會跑出所有可用指令

$ minikube

minikube-helppage

安裝完之後,可以用 where指令 查看 minikube 在本機端的安裝位置

$ where minikube
/usr/local/bin/minikube

也可以查看 minikube 目前的版本

$ minikube version
minikube version: v0.24.1

接著啟動 minikube

$ minikube start

若是第一次啟動的讀者,因為要先下載映像檔以及建立 VM 會花較久的時間

minikube-start

啟動 minikube 之後,會發現 HOME 目錄底多了一個 .kube 的資料夾,而 kubectl 就是透過該資料夾底下的 configuration 與 minikube 溝通,可以用 cat 指令查看 ~/.kube/config 的內容

$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/{your_username}/.minikube/ca.crt
    server: https://192.168.99.101:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    as-user-extra: {}
    client-certificate: /Users/{your_username}/.minikube/client.crt
    client-key: /Users/{your_username}/.minikube/client.key

最後,可以查看目前 minikube 的狀態

$ minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.101

如果是安裝 virtualbox 的讀者,也可以在 VirtualBox 介面上看到目前 vm 的狀態

minikube-vm-gui

在minikube上執行hello-minikube app

啟動 minikube 之後,我們可以透過 kubectl run 在 minikube 上運行一個 Google 提供的 hello-minikube docker image,輸入以下指令

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.8 --port=8080
deployment "hello-minikube" created

然後執行kubectl expose指令,讓本機端可以連到hello-minikube這個服務

$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

接著我們可以使用 minikube service hello-minikube --url 去得到這個 service 的 url

$ minikube service hello-minikube --url
http://192.168.99.101:30839

打開瀏覽器,貼上url,便可以看到

  1. 每次產生的 url 是系統決定的
  2. 可以試著在 url 後面帶入不同參數,可以看到 real path 欄位的轉換,可以試試 http://192.168.99.101:30839/hellokube

結論

在本機端成功架設 minikube 之後,接下來兩天會介紹如何在本機端建造的 Docker Image,並上傳到 Docker Hub。而在更未來的學習筆記中,我們將透過自己打造的 Docker Image 來實作 Kubernetes 的各個元件功能。

Q&A

歡迎大家給予建議與討論,如果能按個讚給些鼓勵也是很開心唷 :)

參考


上一篇
[Day 1] 前言 & 介紹Kubernetes
下一篇
[Day 3] 打造你的Docker containers
系列文
Kubernetes 30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
Stance
iT邦新手 5 級 ‧ 2021-06-20 07:03:15

弱弱的問一下,整個建立環境的流程中VM的建置是必要的嗎?

lovemew67 iT邦新手 5 級 ‧ 2021-07-25 21:39:41 檢舉
zxcvbnius iT邦新手 5 級 ‧ 2021-08-07 12:42:14 檢舉

/images/emoticon/emoticon12.gif

arguskao iT邦新手 3 級 ‧ 2022-05-05 00:10:17 檢舉

我也想問樓主問的問題

1
ooxx5626
iT邦新手 5 級 ‧ 2022-05-10 13:06:44

在新版本中,kubectl run後要記得create才能expose,否則會not found喔

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4

詳細可以看這篇

0
liao2000
iT邦新手 4 級 ‧ 2024-08-11 13:05:17

當我試著使用這行指令時,得到以下錯誤

> kubectl expose deployment hello-minikube --type=NodePort
Error from server (NotFound): deployments.apps "hello-minikube" not found

後來去查了一下似乎是因為前面的步驟是得到 pod 而不是 deployment

> kubectl get pods

所以把 deployment 換行 pod 就可以運作了

> kubectl expose pod hello-minikube --type=NodePort

不知道我這個解決方法是否正確

我要留言

立即登入留言